#include <iostream>
#include "httplib.h"

void hiHandler(const httplib::Request& req, httplib::Response& resp)
{
    // resp.set_content("hi httplib", "text/plain");       // text/plain ：纯文本格式
    // resp.set_content("<h1>hi httplib</h1>", "text/html");       // text/HTML ：html格式
    resp.body = "<h1>aaaaa</h1>";
    resp.set_header("Content-Type", "text/html");
    resp.status = 200;
}

void numsHandler(const httplib::Request& req, httplib::Response& resp)
{
    auto nums = req.matches[1];    // [0]表示整个url，往后下标保存的是捕捉的数据，这里捕捉的是\d+，任意数字
    resp.set_content(nums, "text/plain");
    resp.status = 200;
}

void multipartHandler(const httplib::Request& req, httplib::Response& resp)
{
    auto ret = req.has_file("name1");       // 是否上传名为name1的文件
    if(ret == false) {
        std::cerr << "上传文件失败！\n";
        resp.status = 404;
        return;
    } else {
        const auto& file = req.get_file_value("name1");
        // 设置响应体
        resp.body.clear();
        resp.body = file.filename;
        resp.body += "\n";
        resp.body += file.content;
        // 设置响应头部
        resp.set_header("Content-Type", "text/plain");
        // 设置状态码
        resp.status = 200;
    }
}

int main()
{
    httplib::Server svr;
    svr.Get("/hi", hiHandler);                // 处理针对/hi的Get请求
    svr.Get(R"(/nums/(\d+))", numsHandler);   // 根据正则表达式匹配请求路径
    svr.Post("/multipart", multipartHandler);
    svr.listen("0.0.0.0", 9000);              // 0.0.0.0表示监控服务器的所有网卡
    return 0;
}